查看原文
其他

人物|龚诚:58同城万台服务器下的智能运维实践

58技术 58技术 2022-03-15

第十三届GOPS全球运维大会于11月1日-2日在上海圆满召开。58同城技术副总监龚诚老师受邀出席大会,并带来精彩演讲《万台服务器下的智能运维实践》。


龚诚老师从“多维异常检测、智能告警合并、运维知识图谱构建、智能根因分析”等四个方面进行了系统阐述。

本文根据此演讲实录整理而成,图文详实,欢迎阅读分享。

背景
在智能运维方面,智能监控是一个很好的切入点,因为监控有大量的数据,以及大量的智能分析和处理的需求。58智能监控系统的目标是为集团旗下各业务线提供灵活易用的监控产品,通过覆盖网络层、服务器层、系统层、应用层、业务层的立体化监控体系,实现7*24无死角的实时监控,保障公司各产品的稳定运行。
除传统监控产品支持的数据采集、存储、告警、展示等功能外,58智能监控系统还支持了关键指标的智能预测和异常检测、告警合并、告警根因分析、故障自愈、故障预警等功能。下面分别介绍了智能监控中的几个核心问题。


一、多维异常检测

异常检测在运维实践中有着举足轻重的地位,实时、准确的发现异常能够帮助我们及时采取正确行动,最大限度减少故障损失。随着业务的发展,我们面对的监控场景变得十分复杂,成千上万的监控指标各有各的变化特点,人工维护费时费力,动态变化的业务更是带来高昂的变更沟通与维护成本。
在监控实践中,我们发现繁杂多样的监控指标在变化特性上存在一些基础的共性,基于这些基础共性我们可以把监控指标分为三类:
1)数据有确定变化范围,异常值存在基础共识——适用静态阈值;
2)数据无确定变化范围,历史分布有参考性——适用动态阈值;
3)数据无确定定变化范围,有规律的周期性波动——智能异常检测。

对于第一类监控指标,固定阈值可以很好的解决问题。通常,对系统CPU、内存使用率等系统指标我们会使用静态阈值进行监控。

对于第二类监控指标,我们通常基于其历史分布动态更新阈值,这种情况下监控指标阈值能够自适应的跟随业务变化调整,在保证告警的准确性,减少人力成本的同时,不会出现大量误报,常见的方法有3-sigema和图基检测,由于这两类方法在工业界应用比较广泛,参考资料丰富,此处不做过多介绍。

对于第三类监控指标,使用同/环比监控是业界比较通用的做法,但这种方法比较适用于指标周期性变化很规律的情况,否则会出现较高的误报率。此外,随着要管理的监控指标数的不断增长,监控规则的维护代价也非常高昂。对于这类监控问题,我们使用尝试使用机器学习分类模型来解决,首先通过统计判别与无监督学习结合的方式对原始无标记样本进行标记,生成有标记样本库,之后仔细构建特征,训练分类模型,这部分工作的详细内容之前在58技术公众号的智能运维系列文章中发布,感兴趣的同学可以翻阅一下。

二、智能告警合并

异常大面积发生或关键节点出现异常时,工程师往往会收到大量告警,海量告警消息会干扰工程师的工作状态,淹没有效告警信息,十分不利于问题的快速解决,我们需要选择合适的方法对同类告警进行合并,突出重点信息,辅助问题的快速解决。

由于实际场景中同时刻出现的告警组合五花八门,设计一套基于固定规则的告警合并模板不仅费时费力,还存在扩展性较差的问题,我们在告警合并工作中参考决策树的设计理念,基于基尼指数最小化的原则,划分告警信息,自动选择合并维度,生成告警合并树。

通过告警合并,监控平台在大幅减少告警消息的同时,提升告警消息质量,提取告警共性信息,更好的帮助工程师确定故障位置、判断故障范围。

三、运维知识图谱构建

我们的各个运维系统,如CMDB、监控等数据库中存储着大量的结构数据,各位运维专家脑中则存储了大量运维专家知识与经验,我们希望将这些割裂的数据关联、整合起来,并在此基础上使用数据挖掘的方式,获取更深层次的关联、因果关系,分析运维主体的特性、规律,并整理出运维主体画像,构建一套可全面关联、快速查询、自动更新的运维知识图谱。

在构建运维知识图谱方面,数据是一切的基础,在有限的数据条件下,我们保持着对数据的渴望,不断收集数据,逐步实现多平台事件的打通,并基于现有数据进行进一步的关系挖掘。

在不同系统中,同一运维主体或有归属关系的主体可能会有不同的表述,服务、业务等指标与集群的匹配映射也可能需要人工匹配。以服务-集群匹配映射为例,由于一些历史原因,我们系统中存储的服务-集群映射存在大量的错误与缺失,我们基于平台基础数据构造特征,利用孤立森林算法过滤系统记录中的失效映射,基于有效映射集训练决策树,完成服务与其部署集群的准确映射。

为挖掘运维实体间的关联关系,我们使用Apriori算法对系统事件中的频繁项集进行挖掘,Apriori算法在计算频繁项集与置信度时需要多次遍历原始数据,效率较低,我们在构造原始数据集时对运维实体基于调用、部署等关联关系进行了过滤,减少随机因素干扰,缩减数据集规模,保证挖掘效率。

以监控指标间的关联为例,我们基于频繁项集挖掘构造类似下图的指标关联图。

统一运维知识图谱的构建,帮助我们打通了平台壁垒,更深入认识运维实体间的关联、规律和特性,得益于上述数据的积累,我们开始尝试探索告警根因的智能分析。


四、智能根因分析

运维实践中,告警的发出代表我们发现了一些异常,但异常的根源往往需要人工定位,特别是一些关键节点出现异常时,大量衍生异常导致的告警常常干扰工程师的判断,基于对告警根源定位的需求,我们利用运维知识图谱的数据支撑,实现告警根因诊断功能。

可能导致某个运维主体异常的因素往往有多个,对于确定的影响因素,我们可以方便的利用运维实体间的关联关系构造分析器定位异常。但确定影响因素并非易事,导致运维实体异常的影响因素间往往存在着竞争、优先等逻辑关系,需要工程师基于实际情况进行逻辑判断或顺序校验。

为解决上述问题,我们需要构造一个根因分析管理器,使其能够根据实时异常情况自动选择触发不同的关联分析模块,状态机和行为树在游戏领域被广泛用于解决NPC行为控制问题,我们面临的问题与之十分相似,以系统宕机问题为例,分别构建状态机与行为树如下图。

相比于状态机,行为树有结构灵活,节点间耦合度低,结构变更代价小,节点行为可重用等优点,我们基于行为树模型构造根因分析行为树如下图。

行为树中的逻辑节点控制节点的触发顺序,行为节点负责执行具体的数据分析行为,根因分析行为树中几种典型的行为节点示意如上图。

根因分析模块会基于根因分析结果,生成简洁的根因描述和直观的根因分析视图,帮助用户梳理异常传播链路。以下图为例,某集群有两台虚拟机的宿主机为同一台,该宿主机宕机导致虚拟机宕机,进而引起集群可用性、响应时间异常,生成的根因分析描述和视图如下图。视图中蓝色圆点表示IP级别告警,浅红色圆点代表集群级别异常,深红色圆点代表当前根因分析告警对象。

总结
随着网站中服务器数量的增加和业务复杂程度的增长,传统运维方式已经越来越难有效的满足运维需求,我们会持续的将人工智能相关技术与运维业务相结合,解决运维中的实际问题,不断的提升智能运维能力。
谢大家!


龚诚


现任58集团技术副总监


硕士毕业于哈尔滨工业大学计算机应用专业人工智能方向


曾任职于百度、新浪微博,负责网页搜索和运维及自动化团队的技术和管理工作,有管理数十万台服务器的运维自动化平台设计和开发经验。在网站的稳定性建设、架构的高可用建设、智能运维等方面经验丰富。




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存